const KoaRouter = require('koa-router');
const router = new KoaRouter();
const { query, passwordEncoder } = require('./utility');

// 处理登录请求
// 完整的路由路径是，一级路径 + 二级路径 /users/login
router.post('/login', async (ctx) => {
    // 读取请求中的用户名和密码
    const { username, password } = ctx.request.body;
    console.log({ username, password });

    const data = await query(
        'select username, password from user where username = ?',
        [username],
    );

    // 判断 data 是否查询到了用户的数据
    if (data.length === 0) {
        ctx.body = {
            code: 404,
            message: '用户不存在',
        };
        return;
    }

    // 查询到了用户，开始校验密码
    const user = data[0];
    if (user.password !== passwordEncoder(password)) {
        ctx.body = {
            code: 400,
            message: '用户密码不匹配',
        };
        return;
    }

    // 密码也是正确的，那就登录成功
    ctx.body = {
        code: 200,
        message: '登录成功',
    };
});

// 注册的流程
router.post('/register', async (ctx) => {
    // 读取请求体中的数据
    const { username, password } = ctx.request.body;
    console.log({ username, password });

    // 根据 username 查询数据库，看看有没有这个账号
    const res = await query(
        'select username, password from user where username = ?',
        [username],
    );
    // console.log(res);
    // 如果数组中查询到了结果，说明存在该 username 的用户
    if (res.length !== 0) {
        ctx.body = {
            code: 403,
            message: '用户已存在，不能重复创建',
        };
        return;
    }

    // 创建用户，就是保存到数据库
    // 由于密码不能明文存储在数据库中，所以需要写一个加密函数，来加密密码，再存入数据库
    const insert_result = await query(
        'insert into user (username, password) values (?, ?)',
        [username, passwordEncoder(password)],
    );

    // insert_result = {
    //     fieldCount: 0,
    //     affectedRows: 1, // 受影响行数
    //     insertId: 20,
    //     serverStatus: 2,
    //     warningCount: 0,
    //     message: '',
    //     protocol41: true,
    //     changedRows: 0,
    // };

    // 如果没插入成功，就提示用户出错了
    if (insert_result.affectedRows !== 1) {
        ctx.body = {
            code: 500,
            message: '用户创建失败，请联系管理员：1381106560',
        };
        return;
    }

    // 插入成功，返回成功结果，提示用户
    ctx.body = {
        code: 200,
        data: { id: insert_result.insertId },
        message: '用户注册成功',
    };
});

module.exports = router;
